package com.liyafeng.practice;

import android.content.Context;

/**
 * Created by liyafeng on 16/11/2017.
 */

public class ComputerBasic {


    //region 计算机编码

    /**
     * 讲一下常见编码方式？
     * unicode 和 utf-8的区别?
     * http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
     * https://www.zhihu.com/question/23374078/answer/24385963
     */
    public void a1(Context context) {

        /**
         *  unicode 和 utf-8的区别
         *  https://www.zhihu.com/question/23374078
         *  <p>
         *  unicode是字符集，utf-8是unicode的编码规则
         *  unicode是两个字节表示 0000 0000 0000 0000 65536种可能
         *  后来加上Planes（平面）的概念，每个平面就0000-ffff  现在定义了17个平面
         *  U+0000 默认代表plane 0 ，U+2ffff 代表平面2， 一直到U+10ffff 代表平面16 ，所以又110w个code points(码点) 编码指向
         *  <p>
         *  utf-8是一种编码规则 需要n个字节 开始的n个字节写1，后面跟0， 后面每个8位开头是10，这样剩下的位就写原来的 二进制
         *
         *
         * */

        /**
         *  ASCII 有128个字符，0-127  = 00-7F = 0000 0000 - 0111 1111
         *  8位带符号
         *  一个byte 8位 可以用-128-127 的整数来表示 ，可以用
         *  80 7f 7e
         *  <p>
         *  所以一个字节可以用2个16进制数来表示，如果是ascii码，则可以转化为对应的字符
         * */
        /*
         * 8位一个字节(byte)，那么8位可以表示2^8=256种可能
         * 4位能表示一个16进制数字，所以一个字节能用两个16进制数字表示
         * 1111 1111 表示 FF
         * ==========================================
         * ASCII 码
         * 最早由美国创造，只用了前7位，第一位为0，所以ascii能表示128种字符
         *
         * ---------------Unicode字符集---------------------
         * Unicode是字符集，Utf-8是编码规则，两者是不同的东西
         * Unicode字符集是 ISO（国际标谁化组织）定义的
         * 他的范围是 0x0000 到 0x10FFFF ，从0-10一共17个数字，我们叫做
         * 17个平面（plane），一个平面能表示6w多个字符，所有Unicode能表示
         * 110w+个字符。
         * （对照表）http://www.chi2ko.com/tool/CJK.htm
         * 汉字范围见下图，一般汉字在4e00-9fa5之间，有20902个汉字
         *
         * ==============================================
         * Utf-8编码  Utf-16编码
         * 编码规则见下图
         * 为什么要有编码规则？是因为你不知道 32位是表示一个字符，还是四个字符，
         * 因为32位都表示一个字符，那么英文的存储就很浪费空间（因为他的高位都是0）
         *
         * 比如“知”这个汉字，
         * 在unicode中16进制表示是：77E5(\u77e5)  10进制表示：30693
         * 对应 utf-8的编码（转化）规则就是，
         * 1110XXXX 10XXXXXX 10XXXXXX
         * 77E5=> 0111 0111 1110 0101
         * 将77e5的二进制带入 上面规则，得到
         * 11100111 10011111 10100101
         * 转化为16进制是 e79fa5
         * 所以“知”按utf-8编码后就是e79fa5
         * “知”在unicode中的分配码是 77E5
         *
         * ==================================
         * gb2312 和gbk. GB18030
         * -----------------------gb2312-------------------------
         * gb2312是1981年国家标准局颁布的中文编码规则，是对ascii的一个拓展
         * 判断一个字节小于127，则和ascii的规则一致，两个大于127的字节组成一个汉字
         * 高位0xA1用到0xF7（前边一个字节），低位0xA1到0xFE
         * 因为不能用127以前的，所以高低字节都要从a1开始
         * 我们把两个字节表示一个字符（国家有关的符号），叫做全角字符
         * 127以前的，也就是一个字节表示一个字符，叫做半角字符
         * gb2312能表示7000多个汉字（包括一些罗马字符，日文假字，数学符号）
         * ----------------------gbk---------------------
         * 但是中国汉字太多，包括繁体字。
         * 我们又规定，只要遇到高位是大于127的，低位可以低于127，这样我们
         * 的表示字符的空间增加了一倍，于是把20000多个汉字编码到其中
         * 这个编码规则就叫 gbk。他是gb2312的拓展
         * --------------------GB18030-------------------------
         * 后来再加入了少数民族的文字，这个编码规则叫gb18030
         * 它包括gbk的规则，又拓展了gbk
         *
         */
        context.getResources().getDrawable(R.drawable.unicode);
        context.getResources().getDrawable(R.drawable.unicode_chinese_range);
    }

    /**
     * utf-8编码中的中文占几个字节 ?
     */
    public void a1_1() {
        /*
         * 三个字节，因为unicode中2w多个汉字的编码范围在4e00-95a5之间
         * 所以根据utf-8的编码规则，这个是要转化为三个字节的（24位）
         */
    }
    //endregion

    //region 计算机网络

    /**
     * 什么是APN?
     * -----------------------
     * 通用的APN有哪些？有什么区别
     * -----------------------
     * 什么是WAP?
     */
    public void a2_1() {
        /*
         * Access Point Name
         * https://baike.baidu.com/item/APN
         * 可以访问的外部网络有很多种，比如Internet，WAP网站，企业内部网络
         * 所以我们可以设置接入点的配置，（就是路由ip不一样？）
         *
         */
    }
    //endregion
}
